{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
\cocoascreenfonts1{\fonttbl\f0\froman\fcharset0 Times-Roman;\f1\froman\fcharset0 TimesNewRomanPSMT;\f2\fswiss\fcharset0 ArialMT;
}
{\colortbl;\red255\green255\blue255;}
\margl1440\margr1440\vieww16540\viewh12460\viewkind0
\deftab720
\pard\pardeftab720

\f0\fs24 \cf0 \
\
\pard\pardeftab720\qc

\f1\b\fs38 \cf0 Project Domain & Explanation:\

\f0\b0\fs24 \
\pard\pardeftab720

\f1\fs30 \cf0 The canvas will serve as the UI. From the canvas, the user will load in a data file.
\f0\fs24 \

\f1\fs30 Data files will look like this:
\f0\fs24 \

\f1\fs30 GE.txt
\f0\fs24 \

\f1\fs30 Date	Open	High	Low	Close	Volume	Chg	%Chg	Adj. Close
\f0\fs24 \

\f1\fs30 10/03/12	22.86	22.98	22.72	22.91	32,879,144	0.12	0.53%	22.91
\f0\fs24 \

\f1\fs30 10/02/12	22.93	22.99	22.71	22.79	44,492,714	-0.02	-0.09%	22.79
\f0\fs24 \

\f1\fs30 10/01/12	22.725	23.00	22.71	22.81	42,553,788	0.10	0.44%	22.81
\f0\fs24 \

\f1\fs30 09/28/12	22.77	22.96	22.6167	22.71	70,930,967	-0.02	-0.09%	22.71
\f0\fs24 \

\f1\fs30 09/27/12	22.24	22.86	22.13	22.73	67,186,175	0.63	2.85%	22.73
\f0\fs24 \

\f1\fs30 09/26/12	22.16	22.25	22.07	22.10	41,122,824	-0.21	-0.94%	22.10
\f0\fs24 \

\f1\fs30 09/25/12	22.39	22.665	22.30	22.31	47,000,740	-0.05	-0.22%	22.31
\f0\fs24 \

\f1\fs30 09/24/12	22.40	22.45	22.30	22.36	36,793,617	-0.17	-0.75%	22.36
\f0\fs24 \

\f1\fs30 09/21/12	22.55	22.69	22.461	22.53	66,575,309	0.10	0.45%	22.53
\f0\fs24 \

\f1\fs30 09/20/12	22.19	22.47	22.12	22.43	43,674,148	0.169997	0.76%	22.43
\f0\fs24 \

\f1\fs30 09/19/12	22.30	22.49	22.25	22.43	40,462,566	0.18856	0.85%	22.26
\f0\fs24 \

\f1\fs30 09/18/12	21.99	22.24	21.96	22.24	38,827,152	0.18856	0.86%	22.0714
\f0\fs24 \

\f1\fs30 09/17/12	21.93	22.05	21.90	22.05	79,282,744	-0.059545	-0.27%	21.8829
\f0\fs24 \

\f1\fs30 09/14/12	22.20	22.37	21.98	22.11	100,174,633	0.089318	0.41%	21.9424
\f0\fs24 \

\f1\fs30 09/13/12	21.77	22.24	21.75	22.02	111,711,660	0.129014	0.59%	21.8531
\f0\fs24 \

\f1\fs30 09/12/12	21.67	21.93	21.66	21.89	43,005,522	0.297727	1.39%	21.7241
\f0\fs24 \

\f1\fs30 09/11/12	21.49	21.69	21.40	21.59	33,592,843	0.109166	0.51%	21.4264
\f0\fs24 \

\f1\fs30 09/10/12	21.48	21.65	21.43	21.48	33,670,856	-0.109166	-0.51%	21.3172
\f0\fs24 \

\f1\fs30 09/07/12	21.32	21.59	21.30	21.59	36,329,010	0.277877	1.31%	21.4264
\f0\fs24 \

\f1\fs30 09/06/12	20.87	21.32	20.85	21.31	53,117,631	0.654998	3.20%	21.1485
\f0\fs24 \

\f1\fs30 09/05/12	20.55	20.77	20.51	20.65	32,968,652	0.138939	0.68%	20.4935
\f0\fs24 \

\f1\fs30 09/04/12	20.63	20.69	20.48	20.51	38,173,509	-0.198484	-0.97%	20.3546
\f0\fs24 \
\

\f1\fs30 The Factory will then parse through the information and create a DataSet with each row representing a DataPoint with each column value mapped to the string at the top of the column. The first two variables will be the default X and Y values respectively. The X and Y values will be converted to scatter plots, line graphs, and potentially bar graphs (if there\'92s enough time). The way we will draw these plots on the canvas is through the Axis class. The Axis class will take in the DataSet and scale it to a default size to be drawn onto the canvas. The canvas will then draw the points in either scatter, line, or bar format.
\f0\fs24 \
\
\
\pard\pardeftab720\qc

\f1\b\fs38 \cf0 Metaphor:
\f0\b0\fs24 \
\pard\pardeftab720

\f1\fs30 \cf0 The data file is the plans for the parts of a building. The plans get taken to the Factory and the individual pieces are constructed one by one and put into a larger set of parts. The parts are then taken to the Axis where it tells them where they go on the canvas, which is where they are displayed.
\f0\fs24 \
\pard\pardeftab720\qc

\f1\b\fs38 \cf0 Example:
\f0\b0\fs24 \
\pard\pardeftab720

\f1\fs30 \cf0 A simple example would involve a user specifying a data file and then trying to load a scatterplot from it. First, clicking a load file button in the GUI would trigger action listeners in the Canvas class to send the String denoting a filename to our Factory. This would produce a DataSet which would contain a group of DataPoints. The Factory\'92s createDataSet(String filename) would then pass the DataSet back to Canvas. It would then call getData(), which would return a Collection of DataPoints which it could then paint. 
\f0\fs24 \
\
\pard\pardeftab720\qc

\f1\b\fs38 \cf0 Alternative Implementations:
\f0\b0\fs24 \
\pard\pardeftab720

\f1\fs30 \cf0 An alternative design that we considered before agreeing upon the current design used a single controller for every possible view. A single controller would keep track of multiple views, with each view having key listeners and their appropriate update methods. We found this method unwieldy because a single controller does not need to keep track of multiple views and their respective options. Additionally, a single view can represent data in multiple form. This can be done by having an options drop down menu which can select a different way to represent the data. We initially found the single controller with multiple viewer design more useful when opening multiple GUIs, but our later decision to have multiple graphing options in a single GUI led us to choose a design with a single controller and single view. This hybrid class we called a canvas.
\f0\fs24 \
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\pard\pardeftab720\qc

\f1\b\fs38 \cf0 API:
\f0\b0\fs24 \
\pard\pardeftab720

\f2\fs30 \cf0 DataSet:
\f0\fs24 \

\f2\fs30 private Collection<DataPoint> myData;
\f0\fs24 \

\f2\fs30 public Collection<DataPoint> fit() // Only two DataPoints.
\f0\fs24 \

\f2\fs30 public Collection<DataPoint> getData()
\f0\fs24 \

\f2\fs30 public double averageX()
\f0\fs24 \

\f2\fs30 public double averageY()
\f0\fs24 \

\f2\fs30 public double getStandardDeviationY()
\f0\fs24 \

\f2\fs30 public double getMaxY()
\f0\fs24 \

\f2\fs30 public double getMinY()\
public double getMaxX()\
public double getMinX()
\f0\fs24 \

\f2\fs30 public double getMeanY()
\f0\fs24 \

\f2\fs30 public int getNumberPoints()\
public string getTitle()
\f0\fs24 \
\

\f2\fs30 \
DataPoint:
\f0\fs24 \

\f2\fs30 public DataPoint(Map<String, double> values)
\f0\fs24 \

\f2\fs30 public double getX()
\f0\fs24 \

\f2\fs30 public double getY()
\f0\fs24 \

\f2\fs30 public Collection<String> getXOptions()
\f0\fs24 \

\f2\fs30 public Collection<String> getYOptions()
\f0\fs24 \

\f2\fs30 public void changeXOption(String xOption)
\f0\fs24 \

\f2\fs30 public void changeYOption(String yOption)
\f0\fs24 \

\f2\fs30 public String getLabel()
\f0\fs24 \
\

\f2\fs30 Factory:
\f0\fs24 \

\f2\fs30 public DataSet createDataSet(File file)
\f0\fs24 \
\
\

\f2\fs30 Canvas:
\f0\fs24 \

\f2\fs30 public Canvas()
\f0\fs24 \

\f2\fs30 public void update()
\f0\fs24 \

\f2\fs30 public void paint()
\f0\fs24 \

\f2\fs30 public void loadData()
\f0\fs24 \
\

\f2\fs30 Axis:\
public void loadDataSet(DataSet data)
\f0\fs24 \

\f2\fs30 public Point getPoint(DataPoint data)
\f0\fs24 \

\f2\fs30 public void setScale(Double scale)
\f0\fs24 \

\f2\fs30 public void setScale(DataSet datas)}